/**
 * created by 小卷毛, 2021-08-05
 * Copyright (c) 2021, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.rzico.sbl.viewmodel

import android.app.Activity
import com.rzico.sbl.R
import com.rzico.sbl.model.BaseUrl
import com.rzico.sbl.other.OkGoUpdateHttpUtil
import com.vector.update_app.UpdateAppBean
import com.vector.update_app.check
import com.vector.update_app.updateApp
import com.xinnuo.common.extend.condition
import com.xinnuo.common.extend.conditionFalse
import com.xinnuo.common.extend.getColorEx
import com.xinnuo.common.helper.compareVersion
import org.json.JSONObject

/**
 * 描 述：版本更新操作相关
 * 作 者：小卷毛  2021-08-05 21:11
 * 修改描述：
 * 修 改 人：
 * 修改版本：
 */
open class UpdateViewModel : CommonViewModel() {

    /**
     * @param context 上下文
     * @param slience 是否显示加载框
     * @param show 是否显示更新框
     * @param onNext 不显示更新框时的回调
     */
    fun checkUpdate(
        context: Activity,
        slience: Boolean = false,
        show: Boolean = true,
        onNext: () -> Unit = {}
    ) {

        context.updateApp(
            BaseUrl.version,
            OkGoUpdateHttpUtil()
        ) {
            //设置请求方式，默认get
            isPost = false
            //添加自定义参数
            params = HashMap<String, String>()
            //设置apk下砸路径
            targetPath = context.externalCacheDir?.absolutePath ?: context.cacheDir.absolutePath
            //设置头部图片
            topPic = R.mipmap.icon_update
            //为按钮，进度条设置颜色。
            themeColor = context.getColorEx(R.color.colorAccent)
        }.check {
            onBefore { slience.conditionFalse { showLoading() } }
            onAfter { slience.conditionFalse { dismissLoading() } }
            noNewApp { slience.conditionFalse { showToast("当前已是最新的版本！") } }
            parseJson {
                val jsonObject = JSONObject(it ?: "{}")
                val obj = jsonObject.optJSONObject("data") ?: JSONObject()
                val url = obj.optString("appUrl")
                val remark = obj.optString("appLog")
                val version = obj.optString("appVersion")
                val force = obj.optBoolean("forced")

                UpdateAppBean()
                    //（必须）是否更新Yes/No
                    .setUpdate(
                        if (mVersion.compareVersion(version) < 0) "Yes" else "No"
                    )
                    //（必须）新版本号
                    .setNewVersion(version)
                    //（必须）下载地址
                    .setApkFileUrl(url)
                    //（必须）更新内容
                    .setUpdateLog(remark)
                    //是否强制更新，可以不设置
                    .setConstraint(force)
                    .apply {
                        (!show && isUpdate)
                            .condition {
                                update = "No"
                                onNext.invoke()
                            }
                    }
            }
        }
    }

}